#include <stdio.h>      // 提供输入输出函数：scanf, printf
#include <stdlib.h>     // 提供标准库函数：如 malloc, free（本代码未用）
#include <string.h>     // 提供字符串操作函数：strlen, strcmp, strcat, strcpy

#define MAX 1000        // 定义最大数组长度为1000

int isSearched[MAX] = {0};  // 标记每个单词是否已被搜索
int searchedCount = 1;      // 已搜索单词数，初始为1（包含起始单词）

int main() {
    // step 1# 读取起始单词的索引
    int startIndex;
    scanf("%d", &startIndex);

    // step 2# 读取单词总数
    int wordNum;
    scanf("%d", &wordNum);

    // step 3# 读取所有单词到二维数组中
    char wordSet[MAX][MAX];   // 存储所有单词
    for(int i = 0; i < wordNum; i++) {
        scanf("%s", wordSet[i]);  // 输入单词
    }

    // step 4# 初始化搜索状态
    isSearched[startIndex] = 1;   // 起始单词标记为已搜索
    int len = strlen(wordSet[startIndex]); // 获取起始单词长度
    char ch = wordSet[startIndex][len - 1]; // 当前匹配的目标字符：起始单词的最后一个字母
    int over = 0;   // 控制循环的终止标志
    char result[MAX] = "";  // 最终结果字符串
    strcat(result, wordSet[startIndex]); // 把起始单词加入结果

    // step 5# 不断查找符合条件的单词并拼接
    while (searchedCount < wordNum && !over) {
        over = 1;  // 默认本轮找不到匹配项
        int curIndex = -1;   // 当前匹配到的单词下标
        int curLen = 0;      // 当前最长匹配单词长度
        char curStr[MAX] = ""; // 当前选中的单词

        // step 6# 遍历所有未搜索的单词，找以ch开头的最长/字典序最小的单词
        for(int i = 0; i < wordNum; i++) {
            if (isSearched[i] == 0 && wordSet[i][0] == ch) { // 匹配开头字母
                over = 0; // 本轮找到候选
                if (strlen(wordSet[i]) > curLen) { // 优先长度最长
                    curLen = strlen(wordSet[i]);
                    curIndex = i;
                    strcpy(curStr, wordSet[i]);
                }
                else if (strlen(wordSet[i]) == curLen && strcmp(wordSet[i], curStr) < 0) {
                    // 同长度则选择字典序更小者
                    curIndex = i;
                    strcpy(curStr, wordSet[i]);
                }
            }
        }

        // step 7# 若找到匹配单词，则更新状态
        if (curLen != 0) {
            searchedCount++;  // 已搜索单词数+1
            ch = curStr[curLen - 1]; // 更新下一轮目标字母为当前选中单词末尾字母
            strcat(result, curStr); // 拼接当前选中单词到结果中
            isSearched[curIndex] = 1; // 标记当前单词为已搜索
        }
    }

    // step 8# 输出最终拼接结果
    printf("%s\n", result);
    return 0;
}
